package com.avo.ramcache.orm.impl.m2s;

import com.avo.ramcache.config.IEntity;
import com.avo.ramcache.orm.Accessor;
import com.avo.ramcache.orm.impl.HibernateAccessor;
import org.hibernate.SessionFactory;

import java.io.Serializable;

public class M2SHibernateAccessor extends HibernateAccessor implements Accessor {

    public M2SHibernateAccessor() {
    }

    public M2SHibernateAccessor(SessionFactory sessionFactory) {
        super(sessionFactory);
    }

    @Override
    public <PK extends Serializable, T extends IEntity<?>> T load(Class<T> clz, PK id) {
        return getHibernateTemplate().get(clz, id);
    }

    @Override
    public <PK extends Serializable, T extends IEntity<?>> PK save(Class<T> clz, T entity) {
        return (PK) getHibernateTemplate().save(String.valueOf(clz), entity);
    }

    @Override
    public <PK extends Serializable, T extends IEntity<?>> void remove(Class<T> clz, PK id) {
        T entity = load(clz, id);
        if (entity == null) {
            return;
        }
        getHibernateTemplate().delete(entity);
    }

    @Override
    public <PK extends Serializable, T extends IEntity<?>> void update(Class<T> clz, T entity) {
        getHibernateTemplate().update(entity);
    }

    @Override
    public <PK extends Serializable, T extends IEntity<?>> void saveOrUpdate(Class<T> clz, T entity) {
        getHibernateTemplate().saveOrUpdate(entity);
    }

}
